/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package redinftel.formularios;

import java.util.List;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpSession;
import redinftel.entidades.Usuario;
import redinftel.sesiones.UsuarioFacadeRemote;

/**
 *
 * @author Six Degrees Team
 */
@ManagedBean
@RequestScoped
public class ReactivarBean {

    @EJB
    private UsuarioFacadeRemote usuarioFacade;
    private String password1;
    private String password2;
    private String email;
    private String codigo;
    private int codigoError;

    public int getCodigoError() {
        return codigoError;
    }

    public void setCodigoError(int codigoError) {
        this.codigoError = codigoError;
    }

    /** Creates a new instance of ReactivarBean */
    public ReactivarBean() {
          ChangeLocaleBean.cambiar();
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
/**
 *
 * @return password1
 */
    public String getPassword1() {
        return password1;
    }

    public void setPassword1(String password1) {
        this.password1 = password1;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }
/**
 *
 * @return password2
 */
    public String getPassword2() {
        return password2;
    }

    public void setPassword2(String password2) {
        this.password2 = password2;
    }
/**
 *
 * @return boolean true en el caso de validar el email
 */
    public boolean validarEmail() {
        Pattern p = Pattern.compile("^[\\w\\-\\_]+(\\.[\\w\\-\\_]+)*@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$");
        Matcher m = p.matcher(email);
        if (m.find()) {
            //Es correcta
            return true;
        } else {
            //No es correcta
            return false;
        }
    }
/**
 *
 * @param usuario
 * @param mensaje
 * @param asunto
 * @throws MessagingException
 */
    public void enviarEmail(Usuario usuario, String mensaje, String asunto) throws MessagingException {
        Properties props = new Properties();
        props.setProperty("mail.smtp.host", "smtp.gmail.com");
        props.setProperty("mail.smtp.starttls.enable", "true");
        props.setProperty("mail.smtp.port", "587");
        props.setProperty("mail.smtp.user", "red.sixdegrees@gmail.com");
        props.setProperty("mail.smtp.auth", "true");

        Session session = Session.getDefaultInstance(props);
        session.setDebug(true);

        MimeMessage message = new MimeMessage(session);

        message.setFrom(new InternetAddress("red.sixdegrees@gmail.com"));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(usuario.getEmail()));
        message.setSubject(asunto);
        message.setText(mensaje);

        Transport t = session.getTransport("smtp");
        t.connect("red.sixdegrees@gmail.com", "redsocial");
        t.sendMessage(message, message.getAllRecipients());
        t.close();

    }
/*
 *
 */
    public String doActivar() {
        if (!password1.equals(password2)) {
            codigoError = 1;
            return "reactivar";
        } else {
            if (usuarioFacade.reactivarUsuario(codigo, password1) > 0) {
                List<Usuario> lu = usuarioFacade.findByCode(codigo);
                FacesContext con = FacesContext.getCurrentInstance();
                HttpSession session = (HttpSession) con.getExternalContext().getSession(true);
                session.setAttribute("usuario", lu.get(0));
                return ("principal");
            } else {
                codigoError = 2;
                return "reactivar";
            }

        }

    }

    public String doReactivar() {
        if (email.equals("")) {
            codigoError = 3;
        } else if (!validarEmail()) {
            codigoError = 4;
        } else {
            List<Usuario> usuario = usuarioFacade.findByEmail(email);
            if (usuario.isEmpty()) {
                codigoError = 5;
            } else {
                String texto = "Hola \nEstimado/a " + usuario.get(0).getPerfil().getNombre() + ". Su contraseña en red social es: "
                        + usuario.get(0).getContrasenya() + ". Su codigo de activacion en red social es: " + usuario.get(0).getCodigoValidacion() + " entre en http://localhost:8080/redinftel-war/faces/reactivar.jsp para reactivar su cuenta";
                try {
                    enviarEmail(usuario.get(0), texto, "Reactivar cuenta");
                } catch (MessagingException ex) {
                    Logger.getLogger(RecuperarBean.class.getName()).log(Level.SEVERE, null, ex);
                }
                codigoError = 6;
            }
        }
        return "index";
    }
}
